//
// Created by LiuYou on 2021/6/18.
//

#ifndef LINUXENVIRONMENTPROGRAMMING_ANYTIMER_HPP
#define LINUXENVIRONMENTPROGRAMMING_ANYTIMER_HPP


#define JOB_MAX             1024


typedef void at_jobfunc_t(void*);

/*
 * return >= 0          成功, 返回任务ID
 *        == -EINVAL    失败, 参数非法
 *        == -ENOSPC    失败, 数组满
 *        == -ENOMEM    失败, 内存空间不足
 *
 */
int at_addjob(int sec, at_jobfunc_t* jobp, void* arg);


/*
 * return >= 0          成功, 返回任务ID
 *        == -EINVAL    失败, 参数非法
 *        == -ENOSPC    失败, 数组满
 *        == -ENOMEM    失败, 内存空间不足
 *
 */
int at_addjob_repeat(int sec, at_jobfunc_t* jobp, void* arg);


/*
 * TODO 注意: 联想到之前的 wait()函数, wait()函数是典型的把异步操作同步化。
 *
 * return == 0          成功, 指定任务成功取消
 *        == -EINVAL    失败, 参数非法
 *        == -EBUSY     失败, 指定任务已完成
 *        == -ECANCELED 失败, 指定任务重复取消
 */
int at_canceljob(int id);


/*
 * return == 0          成功, 指定任务成功释放
 *        == -EINVAL    失败, 参数非法
 *        == -EBUSY     失败, 指定任务为周期性任务
 */
int at_waitjob(int id);

//at_pausejob();

//at_resumejob();

//class AnyTimer {
//
//};


#endif //LINUXENVIRONMENTPROGRAMMING_ANYTIMER_HPP
